Ένα πακέτο μακαρόνια, μια κέτσαπ και τυρί

Το επόμενο χαρακτηριστικό της python για το οποίο θα μιλήσουμε είναι οι λίστες.

Οι λίστες είναι χαρακτηριστικό παράδειγμα της απλότητας της σύνταξης της python και πως έχει ενσωματώσει χρήσιμες και σχετικά δύσχρηστες, σε άλλες γλώσσες, έννοιες, και τις έχει μετατρέψει σε πανταχού παρόντα εργαλεία.

Σύνταξη

Μια λίστα ξεκινάει και τελειώνει πάντα σε αγκύλες, και διαχωρίζει τα περιεχόμενά της με κόμματα:

an_empty_list = []

a_list = [1,2,3]

a_list_of_strings = ["one", "two", "three"]

a_mixed_list = ["one", 2, "three", True]

Εμβόλιμο: Αντικείμενα

Οι λίστες είναι ο πρώτος “πολύπλοκος” τύπος τιμής που θα συναντήσετε σε αυτό το workshop. Μερικές παρατηρήσεις:

  • στις λίστες, όπως και σε άλλους πολύπλοκους τύπους, θα δείτε τη σύνταξη foo.bar(), δηλαδή ένα όνομα μεταβλητής, μια τελεία, και στη συνέχεια ένα όνομα εντολής (το ξεχωρίζετε από τις παρενθέσεις, οι οποίες μπορεί να έχουν μέσα τιμές, μεταβλητές, κ.ο.κ.).
  • Αυτοί οι πολύπλοκοι τύποι λέγονται αντικείμενα και θα σταματήσουμε να τους λέμε πολύπλοκους τύπους γιατί είναι χαζό και λάθος.
  • Οι εντολές μετά την τελεία (στην πραγματικότητα λέγονται συναρτήσεις ή μέθοδοι), είναι λειτουργίες των συγκεκριμένων αντικειμένων.
  • Όλα αυτά ανήκουν σε μια σφαίρα του προγραμματισμού που δε θα αγγίξουμε καθόλου σε αυτό το workshop, που λέγεται αντικειμενοστρέφεια.
  • Το μόνο που θα χρειάζεται να καταλάβετε είναι ότι όταν βλέπετε foo.bar(), έχετε μια συνάρτηση, μέθοδο ή εντολή (όπως σας βολεύει να το σκέφτεστε) που λέγεται bar(), που εκτελείται πάνω στο αντικείμενο foo.

Βασικές λειτουργίες

Έστω ότι list είναι μια μεταβλητή που δείχνει σε μια λίστα. Αυτές είναι μερικές από τις λειτουργίες που υποστηρίζει μια λίστα.

  • list.append(x): Προσθέτει το x στο τέλος της λίστας.
  • list.insert(i, x): Προσθέτει το x στη θέση i της λίστας.
  • list.pop(i): Αφαιρεί το στοιχείο που βρίσκεται στη θέση i της λίστας, και το αναθέτει (δηλαδή η πρόταση element = list.pop(2), αναθέτει στη μεταβλητή element το στοιχείο στη θέση 2 της λίστας list). Σημείωση: το όρισμα i είναι προαιρετικό, δηλαδή μπορεί να δείτε και list.pop(), στην οποία περίπτωση αφαιρείται το τελευταίο στοιχείο. Αυτό συνήθως, θα το δείτε σημειωμένο ως εξής: list.pop([i]) αλλά εδώ το γράφουμε χωρίς τις αγκύλες για να μην υπάρξει μπέρδεμα.
  • list.sort(): Ταξινομεί τη λίστα.
  • len(list): Αυτή η ειδική μέθοδος μας δίνει το μήκος μιας λίστας, δηλαδή πόσα στοιχεία έχει η λίστα.
  • Η έκφραση x in list είναι True εάν το x είναι ένα από τα στοιχεία της λίστας, ειδάλλως είναι False.

Κόβοντας

Οι λίστες στην python παρέχουν έναν πολύ πλήρη και εύχρηστο τρόπο προσπέλασης των στοιχείων τους, που λέγεται slicing.

Σε μια λίστα, τα στοιχεία έχουν μια συγκεκριμένη σειρά, και το κάθε ένα αντιστοιχίζεται με έναν αριθμό θέσης, ξεκινώντας από τη θέση 0. Κάπως έτσι:

../_images/list_indices_opaque.gif

Για να πάρουμε το στοιχείο στη θέση 1 της λίστας, εάν η λίστα λέγεται l, θα γράψουμε:

l[1]

Πολύ εύκολα παίρνουμε και παραπάνω από ένα στοιχεία της λίστας:

l[1:3]

Αυτό θα μας δώσει τα στοιχεία από τη θέση 1 έως τη θέση 2. ΠΡΟΣΟΧΗ: Δε θα μας δώσει το στοιχείο στη θέση 3! Εάν θέλαμε και αυτό, θα έπρεπε να γράψουμε l[1:4]. Γενικα, l[i:j] μας δίνει τα στοιχεία από τη θέση i έως τη θέση j-1.

Αυτό είναι το slicing, δηλαδή κόψιμο μιας λίστας. Στην ουσία, η αρχική λίστα παραμένει ανέπαφη, απλά με το slicing δημιουργείται μια νέα λίστα που περιέχει τα στοιχεία που ζητήσαμε από την αρχική.

Μπορούμε επίσης να παραλείψουμε ένα από τα δύο άκρα:

l[:3]

l[1:]

Τότε, στην πρώτη περίπτωση η αρχή του slice θα είναι η αρχή της λίστας. Στη δεύτερη, το τέλος του slice θα είναι το τέλος της λίστας.

Τέλος, μπορείτε να χρησιμοποιήσετε και αρνητικούς αριθμούς, που υποδηλώνουν στοιχεία της λίστας ξεκινώντας από το τέλος. Για παράδειγμα, αυτό είναι το τελευταίο στοιχείο:

l[-1]

Μερικά παραδείγματα:

>>> a_mixed_list = ["one", 2, "three", True]
>>> a_mixed_list[2]
'three'
>>> a_mixed_list[1:3]
[2, 'three']
>>> a_mixed_list[1:]
[2, 'three', True]
>>> a_mixed_list[:3]
['one', 2, 'three']
>>> a_mixed_list[-2]
'three'

Αλφαριθμητικά: μια σημείωση

Τα αλφαριθμητικά, στην python, είναι κι αυτά λίστες. Επομένως όλες οι λειτουργίες που περιγράψαμε παραπάνω, εφαρμόζονται και σε αλφαριθμητικά. Μερικά παραδείγματα:

>>> string = "A monster appears!"
>>> string[2]
'm'
>>> string[2:9]
'monster'
>>> string[10:]
'appears!'